import axios from 'axios';
import { message } from 'antd';
import { API_URL, VERSION_NO, LOGIN_SERVICE } from './config';

// 配置axios的默认URL
axios.defaults.baseURL = API_URL + VERSION_NO;

// Add a request interceptor
axios.interceptors.request.use(config => {
  // Do something before request is sent
  const token = localStorage.getItem('__rstk');
  token && (config.headers.common['Authentication'] = token);
  return config;
}, error => {
  // Do something with request error
  return Promise.reject(error);
});

// 添加响应拦截器
axios.interceptors.response.use(response => {
  // 对响应数据做点什么
  if (response.status === 220) {
    // 需要刷新 token
    axios.get(LOGIN_SERVICE).then(({data}) => {
      localStorage.setItem('__rs', data.id);
      localStorage.setItem('__rstk', data.token);
    });
  }
  return response;
}, ({response, config}) => {
  let msg;
  let status;
  const defaultMsg = '我们遇到点小麻烦，正在紧急解决中，请稍后再试试';
  if (response) {
    status = response.status;
    if (status >= 400 && status <= 500) {
      // 系统可以预期的错误，通过 message 告诉用户应该如何操作
      msg = response.data.message || defaultMsg;
    } else if (status > 500) {
      // 系统不可预期的错误，通过让用户提供 code，让管理员查看日志
      msg = defaultMsg;
    }
  } else {
    msg = '网络崩溃，请重新刷新页面';
  }
  // 对响应错误做点什么
  config.showErrorMsg !== false && message.error(msg);
  return Promise.reject({status, msg});
});

export default axios;
